package com.hxexp.weixin.common.string;

import java.io.UnsupportedEncodingException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;

import com.hxexp.weixin.constant.StringConstant;

/**
 * 字符串工具类
 * @author li.jiang
 *
 */
public final class StringHelper {
    private static final Logger LOGGER = LoggerFactory.getLogger(StringHelper.class);
    private static final String STRING_TEMPLATE = "%s****%s";

    private StringHelper() {
    }
    /**
     * 替换掉XML中的转义字符
     * @param xml 包含XML内容的字符串
     * @return 替换后的字符串
     */
    public static final String replaceXMLEscapeChar(String xml) {
        String str = xml.replaceAll("&lt;", "<");
        return str.replaceAll("&gt;", ">");
    }
    /**
     * 修复字符乱码问题
     * @param str 含有乱码的字符串
     * @return
     */
    public static String fixGarbled(String str) {
        try {
            return new String(str.getBytes("ISO-8859-1"), "utf8");
        } catch (UnsupportedEncodingException e) {
            LOGGER.error(e.getLocalizedMessage(), e);
            return "";
        }
    }

    /**
     * 隐藏身份证号部分数字
     *
     * @param identificationNumber
     *            身份证号
     * @return
     */
    public static String hiddenIDNumber(String identificationNumber) {
        if (!StringUtils.isEmpty(identificationNumber)) {
            String prefix = identificationNumber.substring(0, 6);
            String suffix = identificationNumber.substring(14);

            return String.format(STRING_TEMPLATE, prefix, suffix);
        } else {
            return StringConstant.BLANK;
        }
    }

    /**
     * 隐藏手机号中部分数字
     *
     * @param phoneNo
     *            手机号
     * @return
     */
    public static String hiddenPhoneNumber(String phoneNo) {
        if (!StringUtils.isEmpty(phoneNo)) {
            String prefix = phoneNo.substring(0, 3);
            String suffix = phoneNo.substring(7);

            return String.format(STRING_TEMPLATE, prefix, suffix);
        } else {
            return StringConstant.BLANK;
        }
    }
}
